Ambos lados da revisão anteriorRevisão anteriorPróxima revisão | Revisão anterior |
csharp [2025/04/02 04:05] – [Luz LED] admin | csharp [2025/04/15 16:34] (atual) – edição externa 127.0.0.1 |
---|
} | } |
</code> | </code> |
| |
==== Aviso Importante sobre Busy-Waiting ==== | ==== Aviso Importante sobre Busy-Waiting ==== |
Como já informado na página de [[Programação]], o simulador e o seu código rodam na mesma "camada" (thread). Então o seu código impacta DIRETAMENTE no FPS ("quadros por segundo", fluidez) do simulador. Códigos pesados podem acabar pausando o simulador por um tempo considerável causando um crash. Você **sempre** deve usar ''%%await%%'' para evitar segurar o simulador por tempo demais no seu código. | Como já informado na página de [[Programação]], o simulador e o seu código rodam na mesma "camada" (thread). Então o seu código impacta DIRETAMENTE no FPS ("quadros por segundo", fluidez) do simulador. Códigos pesados podem acabar pausando o simulador por um tempo considerável causando um crash. Você **sempre** deve usar ''%%await%%'' para evitar segurar o simulador por tempo demais no seu código. |
| |
==== Servomotor ==== | ==== Servomotor ==== |
| class Servomotor |
| |
| O servomotor é um componente que pode ser rotacionado utilizando uma força, travado e (por não ser apenas um motor, mas sim um servomotor) pode ter seu ângulo retornado. Para acessar um motor, utilize a sintaxe abaixo: |
| |
| <code csharp> |
| Bot.GetComponent<Servomotor>("meu motor"); |
| </code> |
| |
| **Propriedades públicas:** |
| |
| * ''double .Angle'': Utilize isso para pegar o ângulo atual de rotação do motor; |
| * ''bool .Locked'': Booleano que pode ser definido para travar qualquer rotação do motor (valor padrão ''= true''); |
| * ''double .Force'': Double para definir a força (positiva apenas) incremental que será exercida pelo motor aos seus objetos conectados para alcançar a velocidade Target/Desejada. |
| * ''double .Target'': Velocidade máxima desejada que o motor pode alcançar, pode ser positiva ou negativa determinando assim o sentido de rotação. |
| |
| **Método Público:** |
| |
| * ''void Apply(double force, double target)'': Aplica uma força ao motor para alcançar uma determinada velocidade. Para a maioria dos casos basta usar o mesmo valor porém passar o primeiro parâmetro como positivo (ver exemplo mais abaixo com Math.Abs). |
| |
| |
| |
| |
==== Sensores Internos do Robô / Controlador ==== | ==== Sensores Internos do Robô / Controlador ==== |
| <code csharp> |
| class Bot = __sBotics__RobotController |
| </code> |
| |
| Bot não é "só mais um" componente, ela representa apenas a classe reservada ''__sBotics__RobotController'', que não pode ser diretamente chamada pelo usuário (por possuir o prefixo ''__sBotics__'') e está inclusa apenas em uma única peça no robô, como um "componente central". Entretanto, há algumas propriedades e métodos que podem ser utilizados. |
| |
| Propriedades públicas: |
| |
| * ''double .Inclination'': Retorna a angulação do componente central em relação ao plano; |
| * ''double .Compass'': Retorna a angulação do componente central em relação ao norte geográfico; |
| * ''double .Speed'': Retorna a velocidade no qual o componente central está se deslocando. |
| |
| Métodos públicos: |
| |
| <code csharp> |
| T .GetComponent<T>(string name) |
| </code> |
| |
| Já discutido inúmeras vezes neste texto, busca o componente da classe T com o nome especificado; |
| |
| <code csharp> |
| string[] .Components() |
| </code> |
| |
| Retorna um array de string (''string[]'') com o nome de todos os componentes. |
| |
------- | ------- |
| |
===== Classes de Apoio ===== | ===== Classes de Apoio ===== |
lorem ipsum | Algumas classes de apoio foram criadas para facilitar o desenvolvimento, oferecendo funcionalidades que simplificam tarefas comuns e melhoram o entendimento da programação. |
| |
==== Color ==== | ==== Color ==== |
| A classe Color é a maior classe de apoio do simulador. Com ela é possível realizar operações com cores, verificar qual a cor mais próxima, puxar o valor de iluminação, etc. |
| |
| **Construtor:** |
| |
| <code csharp> |
| // Formato: Color Color(double, double, double) |
| Color minhaCor = new Color(60, 128, 255); |
| </code> |
| |
| **Propriedades públicas:** |
| |
| * ''double .Brightness'': Retorna a luminosidade em preto-e-branco da cor vista (de 0 a 255, onde 0 é preto e 255 é branco), podendo ser utilizado para focar em valores absolutos de luminosidade mais do que cores por ex. |
| * ''double .Red'': Retorna o valor de vermelho na cor, utilizando a cor construída acima, seria 60. |
| * ''double .Green'': Retorna o valor de verde na cor, utilizando a cor construída acima, seria 128. |
| * ''double .Blue'': Retorna o valor de azul na cor, utilizando a cor construída acima, seria 255. |
| |
| **Métodos públicos:** |
| |
| * ''string ToString()'': Retorna o nome da cor mais próxima, como "Vermelho", ou "Black" (dependendo do idioma do seu código); |
| * ''Colors Closest()'': Retorna a cor mais próxima da cor informada, ex. Colors maisProxima = minhaCor.Closest(). Para mais informações, ver o enumerador Colors abaixo para ver as cores possíveis; |
| * ''double DistanceTo(Color)'': Retorna a distância absoluta entre duas cores. Vale ressaltar que o olho humano vê a diferença entre duas cores de forma diferente, já que algumas cores possuem mais "peso" no nosso cérebro que outras. Ex. minhaCor.DistanceTo(new Color(255, 255, 255)). |
| |
| **Métodos estáticos:** |
| |
| * ''Color Color.ToColor(Colors color)'': Transforma a cor no formato Colors (ver enumeração abaixo) em uma cor do tipo Color. Ex. Color minhaNovaCor = Color.ToColor(Colors.Magenta); |
| * ''Color Color.ToColor(string color)'': Transforma a cor no formato string (depende do idioma do seu código) em Color. Ex. Color minhaNovaCor = Color.ToColor("Verde"). |
| |
==== Time ==== | ==== Time ==== |
| A classe Time possui métodos para gerenciamento de tempo, e poder realizar coisas como cronômetros e esperar assíncronamente um intervalo de tempo. Esses métodos são: |
| |
| **Propriedades estáticas:** |
| |
| * ''double Time.Timestamp'': Retorna o valor que corresponde ao tempo atual em segundos, podendo ser utilizado para criar cronômetros. |
| **Métodos estáticos:** |
| |
| * ''Time.Delay(double ms)'': Tarefa que espera o valor em milissegundos e pode ser utilizado utilizando a palavra-chave await em métodos async. |
| |
==== IO ==== | ==== IO ==== |
| A classe IO é utilizada para impressão de dados em um console virtual ou em um arquivo de texto local no computador. Vale ressaltar que o funcionamento do console e do arquivo de texto estão diferentes da forma que foram originalmente criados em 2020. Esses métodos são: |
| |
| **Métodos estáticos de escrita em console:** |
| |
| * ''void IO.ClearPrint()'': Limpa o console; |
| * ''void IO.Print(string text)'': Limpa o console e escreve na primeira linha o texto informado; |
| * ''void IO.PrintLine(string text)'': Empurra o conteúdo do console uma linha abaixo e escreve na nova linha o texto informado. |
| |
| **Métodos estáticos de escrita em arquivo:** |
| |
| * ''void IO.ClearWrite()'': Limpa o arquivo de texto; |
| * ''void IO.Write(string text)'': Limpa o arquivo de texto e escreve na primeira linha o texto informado; |
| * ''void IO.WriteLine(string text)'': Empurra o conteúdo do arquivo de texto uma linha abaixo e escreve na nova linha o texto informado. |
| |
| **Outros métodos/propiedades estáticas:** |
| |
| * ''bool IO.Timestamp'': Booleano usado para definir se mensagens impressas terão marcação de horário (hh:mm:ss); |
| * ''void IO.OpenConsole()'': Método utilizado para abrir o console automaticamente atravez do código. |
| |
==== Utils ==== | ==== Utils ==== |
| A classe Utils possui alguns métodos matemáticos para ajudar o desenvolvimento do programador C# e rEduc. Sendo esses: |
| |
| **Métodos estáticos:** |
| |
| * ''double Utils.Clamp(double value, double minValue, double MaxValue)'': Retorna o valor entre o mínimo e o máximo, transformando seu número nos extremos caso ele "ultrapasse-os"; |
| * ''double Utils.Map(double value, double minA, double maxA, double minB, double maxB)'': Mapeia o valor no primeiro parâmetro que está na escala entre minA e maxA para a escala entre minB e maxB; |
| * ''double Utils.Random(double min, double max)'': Retorna um valor aleatório entre o minimo e o máximo informado; |
| * ''double Utils.SetPrecision(double value, double precision)'': Alias para Math.Round(double, int), retorna o mesmo double porém com o valor de casas decimais especificadas no segundo parâmetro; |
| * ''double Utils.Modulo(double value, double mod)'': Realiza a operação value % mod, porém com suporte a valores negativos, já que no C# -1 % 5 = -1, e o esperado seria -1 % 5 = 4. |
| |
==== Enumeradores ==== | ==== Enumeradores ==== |
| |
| Alguns enumeradores foram criados para ajudar no desenvolvimento. |
| |
| * **Colors**: Colors representam algumas cores padrão, e podem ser utilizados para algumas comparações e métodos estáticos da classe ''Color''. |
| - Black |
| - White |
| - Green |
| - Red |
| - Blue |
| - Yellow |
| - Magenta |
| - Cyan |
| |
| * **Notes**: Notes podem ser utilizadas para tocar sons utilizando o Buzzer. |
| - C |
| - D |
| - E |
| - F |
| - G |
| - A |
| - B |
| |
| * **Solfege**: O solfège realiza a mesma função das notas, porém línguas que vêm do latim utilizam esse sistema em oposição ao sistema de letras visto no enumerador ''Notes''. |
| - Do |
| - Re |
| - Mi |
| - Fa |
| - Sol |
| - La |
| - Si |
| |
| * **WaveFormats**: Os formatos de onda, ou WaveFormats são utilizados para tocar sons no buzzer, eles dão uma "textura" diferente ao som, podendo ser utilizados como percursão ou 'outros instrumentos'. |
| - Mute |
| - Square |
| - Sawtooth |
| - Noise |
| |
------- | ------- |
| |
===== Buscando Comandos ===== | ===== Buscando Comandos ===== |
lorem ipsum | Embora este tutorial seja bastante completo, ele pode não mostrar toda a profundidade que é possível alcançar com o C# para sBotics (com objetos como a câmera ou caneta 3D, por exemplo). Sendo assim, é recomendável que você como usuário esteja sempre atrás de conteúdos. |
==== Código Fonte ==== | ==== Código Fonte ==== |
lorem ipśum | O código fonte da parte programável (sensores, componentes, etc) do sBotics está disponível em [[https://github.com/sBotics/programming-reference|Github: sBotics/Programming Reference]]. |
| |
| Lá é possível entender como funcionam os sensores exatamente e saber todos os métodos, classes, propriedades, enums, namespaces, etc. que o usuário tem acesso. |
==== Do rEduc ==== | ==== Do rEduc ==== |
lorem ipśum | É possível ver também a "tradução" que o rEduc faz para C# em [[https://code.sbotics.net/programming/platforms/c0db56ec-619f-498f-9fbb-7835735f0f5e/languages/4224cf8e-f00c-4cc5-bd08-f0d22fad011d/functions?category=&cv=csharp|Funções sBotics]], e ver exatamente o nome de cada comando rEduc e o seu código C# equivalente para fins de estudo. |
| |
------- | ------- |