sBotics Wiki

Tutorial do Simulador usado pela OBR

Ferramentas do usuário

Ferramentas do site


csharp

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
csharp [2025/04/02 04:10] – [Servomotor] admincsharp [2025/04/15 16:34] (atual) – edição externa 127.0.0.1
Linha 26: Linha 26:
 } }
 </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.
Linha 243: Linha 242:
  
   * ''double .Angle'': Utilize isso para pegar o ângulo atual de rotação do motor;   * ''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);+  * ''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 .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.   * ''double .Target'': Velocidade máxima desejada que o motor pode alcançar, pode ser positiva ou negativa determinando assim o sentido de rotação.
Linha 249: Linha 248:
 **Método Público:** **Método Público:**
  
-  * ''void Apply()'': 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).+  * ''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).
  
  
Linha 256: Linha 255:
  
 ==== 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.
  
 ------- -------
csharp.1743567010.txt.gz · Última modificação: 2025/04/15 16:34 (edição externa)